using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._LocationReferencingTools
{
    /// <summary>
    /// <para>Generate Routes</para>
    /// <para>Re-creates shapes and applies calibration changes for route features in an LRS Network.</para>
    /// <para>重新创建形状并应用 LRS 网络中路径要素的校准更改。</para>
    /// </summary>    
    [DisplayName("Generate Routes")]
    public class GenerateRoutes : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateRoutes()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_route_features">
        /// <para>Input Route Features</para>
        /// <para>The LRS Network for which route shapes will be regenerated and calibration changes will be applied.</para>
        /// <para>将为其重新生成路由形状并应用校准更改的 LRS 网络。</para>
        /// </param>
        public GenerateRoutes(object _in_route_features)
        {
            this._in_route_features = _in_route_features;
        }
        public override string ToolboxName => "Location Referencing Tools";

        public override string ToolName => "Generate Routes";

        public override string CallName => "locref.GenerateRoutes";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_route_features, _record_calibration_changes.GetGPValue(), _out_route_features, _out_derived_route_features, _out_details_file];

        /// <summary>
        /// <para>Input Route Features</para>
        /// <para>The LRS Network for which route shapes will be regenerated and calibration changes will be applied.</para>
        /// <para>将为其重新生成路由形状并应用校准更改的 LRS 网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Route Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_route_features { get; set; }


        /// <summary>
        /// <para>Record calibration changes for event location updates</para>
        /// <para><xdoc>
        ///   <para>Specifies whether event behaviors will be applied.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Any calibration points created, modified, or deleted outside the Location Referencing tools will be applied to the routes in the network, and event behaviors will be applied the next time Apply Event Behaviors is run.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Calibration changes will be applied to the routes in the LRS Network, but no event behaviors will be applied. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否应用事件行为。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 在位置参考工具之外创建、修改或删除的任何校准点都将应用于网络中的路径，并且下次运行应用事件行为时将应用事件行为。</bullet_item><para/>
        ///     <bullet_item>未选中 - 校准更改将应用于 LRS 网络中的路径，但不会应用任何事件行为。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Record calibration changes for event location updates")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _record_calibration_changes_value _record_calibration_changes { get; set; } = _record_calibration_changes_value._false;

        public enum _record_calibration_changes_value
        {
            /// <summary>
            /// <para>NO_RECORD_CALIBRATION_CHANGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_RECORD_CALIBRATION_CHANGES")]
            [GPEnumValue("false")]
            _false,

            /// <summary>
            /// <para>RECORD_CALIBRATION_CHANGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RECORD_CALIBRATION_CHANGES")]
            [GPEnumValue("true")]
            _true,

        }

        /// <summary>
        /// <para>Output Route Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Route Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_route_features { get; set; }


        /// <summary>
        /// <para>Output Derived Route Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Derived Route Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_derived_route_features { get; set; }


        /// <summary>
        /// <para>Output Results File</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Results File")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_details_file { get; set; }


        public GenerateRoutes SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}